1
Introduzione agli Agenti di Problem Solving
PolyU COMP5511Lezione 2
00:00

Dal Riflesso alla Pianificazione

Nell'evoluzione della progettazione degli agenti, passiamo da Agenti Riflessivi, che mappano le percezioni direttamente alle azioni basandosi su regole semplici (es. "Se l'auto davanti frena, inizia la frenata"), a Agenti di Problem Solving. Gli agenti riflessivi operano sul contesto immediato, mentre gli agenti di problem solving sono Basati su Obiettivi. Considerano le conseguenze future delle loro azioni per trovare una sequenza che soddisfi un obiettivo specifico.

  • Agente Riflessivo: $Azione = Funzione(Percezione)$
  • Agente di Pianificazione: $SequenzaAzioni = Ricerca(Stato, Obiettivo)$

La Rappresentazione Atomica dello Stato

A questo livello fondamentale, gli agenti utilizzano una Rappresentazione Atomica. Ciò significa che lo stato del mondo viene trattato come una scatola nera: un nodo singolare senza struttura interna visibile all'algoritmo di ricerca. L'agente ragiona solo su:

  • Stati ($S$): Istantanee dell'ambiente.
  • Azioni ($A$): Transizioni tra stati.
  • Test Obiettivo: Un controllo booleano se lo stato $s \in S_{obiettivo}$.

Il Ciclo di Problem Solving

Un agente di problem solving segue un ciclo distinto in quattro fasi per navigare nell'ambiente:

  1. Formulazione dell'Obiettivo: Decidere quale obiettivo perseguire in base alla situazione attuale.
  2. Formulazione del Problema: Astrazione del mondo reale in un modello matematico (Stati e Azioni).
  3. Ricerca: Simulazione di sequenze di azioni per trovare il percorso ottimale.
  4. Esecuzione: Esecuzione delle azioni trovate durante la fase di ricerca senza ulteriori deliberazioni (assumendo un ambiente statico).
Implementazione Python (agent_types.py)
1
class ReflexAgent:
2
defact( self, percezione):
3
# Mappatura diretta: Regola -> Azione
4
return regole.get(percezione, azione_predefinita)
5
6
class ProblemSolvingAgent:
7
def__init__( self):
8
self.seq = [] # Sequenza di azioni in buffer
9
10
defact( self, percezione):
11
# Se siamo a metà esecuzione, continua
12
ifself.seq:
13
returnself.seq.pop( 0))
14
15
# Altrimenti, Pianifica (Ricerca)
16
stato = self.aggiorna_stato(percezione)
17
obiettivo = self.formula_obiettivo(stato)
18
problema = self.formula_problema(stato, obiettivo)
19
20
# La Ricerca restituisce una lista di azioni
21
self.seq = algoritmo_ricerca(problema)
22
23
returnself.seq.pop( 0))